/**
 * org.assess.oa.system.service.TbMenuService
 */
package org.assess.oa.system.service;

import java.util.List;

import org.assess.core.bean.node.Node;
import org.assess.core.service.ServiceResult;
import org.assess.oa.system.bean.TbMenu;
import org.assess.oa.system.bean.TbMenuItem;

/**
 * @description 菜单管理的Service层接口
 * @author XiaLongxiang
 * @createtime 2012-6-6 下午5:40:27
 */
public interface TbMenuService {
    /**
     * 根据菜单ID查询菜单信息
     * @param menu
     * @return
     */
    public TbMenu queryTbMenuById(TbMenu menu);
    
    /**
     * 根据菜单项ID查询菜单项信息
     * @param menuitem
     * @return
     */
    public TbMenuItem queryTbMenuItemById(TbMenuItem menuitem);
    
    /**
     * 查询菜单，并返回支持列表界面树形结构的JSON字符串
     * @param depth
     * @param menu
     * @return
     */
    public String queryTbMenuAsList(int depth, TbMenu menu);
    
    /**
     * 查询根据用户编码和系统编码，查询该用户在本系统中所拥有的菜单(项)，并返回具有层次关系的TreeNode节点
     * @param user_code
     * @param system_code
     * @return
     */
    public List<Node> queryUserMenu(String user_code, String system_code);
    
    /**
     * 保存菜单信息
     * @param menu
     * @param edit
     * @return
     */
    public ServiceResult saveTbMenu(TbMenu menu, boolean edit) throws Exception;
    
    /**
     * 保存菜单项信息
     * @param menuitem
     * @param edit
     * @return
     */
    public ServiceResult saveTbMenuItem(TbMenuItem menuitem, boolean edit) throws Exception;
    
    /**
     * 检查菜单信息：检查菜单编码是否已存在
     * @param menu
     * @return
     */
    public String checkTbMenu(TbMenu menu);
    
    /**
     * 检查菜单项信息：检查菜单项编码是否已存在
     * @param menuitem
     * @return
     */
    public String checkTbMenuItem(TbMenuItem menuitem);
    
    /**
     * 删除菜单信息
     * @param menu
     * @return
     */
    public String deleteTbMenu(TbMenu menu) throws Exception;
    
    /**
     * 删除菜单项信息
     * @param menuitem
     * @return
     */
    public String deleteTbMenuItem(TbMenuItem menuitem) throws Exception;
    
    /**
     * 加载菜单列表，并返回其JSON字符串，用于ztree的下拉树
     * @param menu
     * @return
     */
    public String queryTbMenuAsJsonArray(TbMenu menu);
    
    /**
     * 根据系统编码，加载该系统所包含的所有菜单和菜单项
     * @param role_id
     * @param menu
     * @return
     */
    public String queryMenuAsRoleAll(String role_id, TbMenu menu);
}
